#include #include #include void* memorycopy (void *des, const void *src, size_t count) { size_t n = (count + 7) / 8; char* destination = (char *) des; char* source = (char *) src; switch (count % 8) { case 0: do{ *destination++ = *source++; case 7: *destination++ = *source++; case 6: *destination++ = *source++; case 5: *destination++ = *source++; case 4: *destination++ = *source++; case 3: *destination++ = *source++; case 2: *destination++ = *source++; case 1: *destination++ = *source++; } while (--n > 0); } return des; } void tworegistervarswap (int *x, int *y) { if (x != y) { *x = *x ^ *y; *y = *x ^ *y; *x = *x ^ *y; } } int bigintegeraverage (int x, int y) { return (x & y) + ((x ^ y) >> 1); } int main (void) { char *testArray = "This is a test."; char buffer[50]; int x = 10; int y = 20; int m = 2000000000; int n = 1000000000; printf ("\nmemorycopy test before: %s", testArray); memorycopy (buffer, testArray, strlen(testArray) + 1); printf ("\nmemorycopy test after: %s", buffer); printf ("\n"); printf ("\ntworegistervarswap test before: %d %d", x, y); tworegistervarswap (&x, &y); printf ("\ntworegistervarswap test after: %d %d", x, y); printf ("\n"); printf ("\nbigintegeraverage regular code test: %d ", (m + n) / 2); printf ("\nbigintegeraverage function test: %d", bigintegeraverage (m, n) ); printf ("\n"); return 0; }